package com.zyz.M_File和IO流.File类.练习;

import java.io.File;

/**
 * @author: vick
 * @Date: 2025/4/7
 * @Description:
 * @version: 1.0
 */
public class Test3 {
    public static void main(String[] args) {
        String dirPath = "C:\\Users\\14338\\Desktop\\java_study";
        File file = new File(dirPath);

        //遍历目录
        traverseDir(file);

        //计算目录的大小
        long dirSize = calculDirSize(file);
        System.out.println("指定目录占用空间大小:" + dirSize + "字节");

        //删除指定文件目录及其下的所有文件
        if (deleteDir(file)) {
            System.out.println("删除成功");
        }else {
            System.out.println("删除失败");
        }

    }

    //删除目录
    private static boolean deleteDir(File directory) {
        //判断是否是目录或者是否从存在
        if (directory.exists() && directory.isDirectory()) {
            //判断目录是否为空，如果为空直接删除，如果是目录，递归删除子目录
            File[] files = directory.listFiles();
            if (files != null) {
                for (File file : files) {
                    if(file.isDirectory()) {
                        deleteDir(file);
                    }else {
                        file.delete();
                    }
                }
            }
            return directory.delete();
        }
        return false;
    }

    //计算目录大小
    private static long calculDirSize(File directory) {
        long size = 0;
        if (directory.exists() && directory.isDirectory()) {
            File[] files = directory.listFiles();
            if (files != null) {
                for (File file : files) {
                    if (file.isDirectory()) {
                        size += calculDirSize(file);
                    }else {
                        size += file.length();
                    }
                }
            }
        }
        return size;
    }

    //遍历指定目录下的所有文件及子目录文件的名称
    private static void traverseDir(File directory) {
        if (directory.exists() && directory.isDirectory()) {
            File[] files = directory.listFiles();
            if (files != null) {
                for (File file :  files) {
                    if (file.isDirectory()) {
                        traverseDir(file);
                    }else {
                        System.out.println(file.getAbsolutePath());
                    }
                }
            }
        }
    }
}
